package LeetCode.month01.day27;

import java.util.HashMap;
import java.util.Map;

public class No1297 {
    public static void main(String[] args) {
        System.out.println(maxFreq("aababcaab",2,3,4));
    }
    public static int maxFreq(String s, int maxLetters, int minSize, int maxSize) {
        char[] str = s.toCharArray();
        HashMap<String,Integer> map = new HashMap<>();
        int[] cnt = new int[26];
        int kinds = 0;
        int ans = 0;
        int curr = 0;
        for (int i = 0; i < str.length; i++) {
            char c = str[i];
            if(cnt[c-'a']==0) {
                kinds++;
            }
            cnt[c-'a']++;
            int left = i-minSize+1;
            if(left<0)continue;
            if(kinds<=maxLetters){
                //String sub = S.substring(i-minSize,i);
                String sub = s.substring(left,left+minSize);
                map.put(sub,map.getOrDefault(sub,0)+1);
                curr = map.get(sub);
                ans = Math.max(curr,ans);
            }
            if(--cnt[str[left]-'a']==0) kinds--;
        }
        return ans;























//        char[] s = S.toCharArray();
//        Map<String, Integer> cntStr = new HashMap<>();
//        int[] cntChar = new int[26];
//        int kinds = 0;
//        int ans = 0;
//        for (int i = 0; i < s.length; i++) {
//            // 1. 进入窗口
//            int in = s[i] - 'a';
//            if (cntChar[in] == 0) {
//                kinds++;
//            }
//            cntChar[in]++;
//
//            int left = i - minSize + 1;
//            if (left < 0) { // 窗口大小不足 minSize
//                continue;
//            }
//
//            // 2. 更新统计量
//            if (kinds <= maxLetters) {
//                String subStr = S.substring(left, left + minSize);
//                int cnt = cntStr.merge(subStr, 1, Integer::sum); // cnt = ++cntStr[subStr];
//                ans = Math.max(ans, cnt);
//            }
//
//            // 3. 离开窗口，为下一个循环做准备
//            int out = s[left] - 'a';
//            cntChar[out]--;
//            if (cntChar[out] == 0) {
//                kinds--;
//            }
//        }
//        return ans;
    }
}
